import re

from info import sr
from info.libs.captcha.pic_captcha import captcha
from info.libs.yuntongxun.sms import CCP
from info.tools.response_code import RET, error_map
from . import passport_blue
from flask import request,current_app,make_response , jsonify, abort
import random

# 获取图片验证码
@passport_blue.route('/get_img_code')
def get_img_code():
    # 获取参数
    img_code_id = request.args.get('img_code_id')
    # 校验参数
    if not img_code_id:
        return jsonify(code=RET.DATAERR, errmsg=error_map[RET.DATAERR])
    # 生成验证码
    img_name, img_text, img_bytes = captcha.generate_captcha()
    # 保存验证码
    try:
        sr.set('img_code_id'+img_code_id, img_text, ex=300)
    except BaseException as e:
        abort(403)
        current_app.loggin.info(e)
        return jsonify(code=RET.DBERR, errmsg=error_map[RET.DBERR])
    # 返回给前端
    response = make_response(img_bytes)
    response.content_type = 'image/jpeg'

    return response

# 获取图片验证码
@passport_blue.route('/get_sms_code',methods = ['POST'])
def get_sms_code():
    print()
    # 获取参数
    img_code_id = request.json.get('img_code_id')
    img_code = request.json.get('img_code')
    moblie = request.json.get('mobile')

    # data = eval(request.data.decode('utf-8'))
    # img_code_id = data.get('img_code_id')
    # img_code = data.get('img_code')
    # moblie = data.get('mobile')

    # 校验参数
    if not all([img_code_id, img_code, moblie]):
        return jsonify(code=RET.DATAERR, errmsg=error_map[RET.DATAERR])

    if not re.match(r'1[356789]\d{9}$', moblie):
        return jsonify(code=RET.DATAERR, errmsg=error_map[RET.DATAERR])

    # 验证图片
    try:
        real_img_code = sr.get('img_code_id'+img_code_id)
    except BaseException as e:
        current_app.logger.error(e)
        abort(403)
        return jsonify(code=RET.DBERR, errmsg=error_map[RET.DBERR])
    if real_img_code != img_code.upper():
        return jsonify(code=RET.PASSPORTERR, errmsg=error_map[RET.PASSPORTERR])
    # 随机生成4位验证码
    sms_code = '%04d' % random.randint(0,9999)

    # 发送验证码
    ccp = CCP()
    try:
        # 注意： 测试的短信模板编号为1
        seb_sms = ccp.send_template_sms(moblie, [sms_code, 5], 1)
        if seb_sms != 0:
            return jsonify(code=RET.THIRDERR, errmsg=error_map[RET.THIRDERR])
        sr.set('sms_code' + moblie, sms_code, ex=5 * 60)
    except BaseException as e:

        current_app.logger.error(e)

        return jsonify(code=RET.THIRDERR, errmsg=error_map[RET.THIRDERR])

    return jsonify(code=RET.OK, msg='发送成功')

# 用户注册
@passport_blue.route('/user_register')
def user_register():
    # 获得参数
    # 验证参数
    # 检查数据库是否存在
    # 写入数据库
    # 登陆session存储
    # 返回数据
    pass



